﻿using ExcellentProjectPlus.Dominio.Calificaciones.Entidades;
using ExcellentProjectPlus.Dominio.Calificaciones.Repositorios;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ExcellentProjectPlus.Dominio.Calificaciones.Servicios.CalificacionParcialEstudiantes
{
    public class ServicioDeAdministracionDeCalificacionParcialEstudiantes: IServicioDeAdministracionDeCalificacionParcialEstudiantes
    {
        #region Atributos
        IUnidadDeTrabajoCalificaciones _unidadDeTrabajo;
        #endregion

        #region Constructores
        public ServicioDeAdministracionDeCalificacionParcialEstudiantes(IUnidadDeTrabajoCalificaciones unidadDeTrabajo)
        {
            _unidadDeTrabajo = unidadDeTrabajo;
        }
        #endregion

        public IEnumerable<CalificacionParcialEstudiante> ObtenerCalificacionParcialEstudiantes()
        {
            return _unidadDeTrabajo.RepositorioCalificacionParcialEstudiantes.Obtener();
        }

        public CalificacionParcialEstudiante ObtenerCalificacionParcialEstudiantePorId(int id)
        {
            return _unidadDeTrabajo.RepositorioCalificacionParcialEstudiantes.ObtenerPorId(id);
        }
    
        public void AgregarCalificacionParcialEstudiante(CalificacionParcialEstudiante calificacionParcialEstudiante)
        {
            _unidadDeTrabajo.RepositorioCalificacionParcialEstudiantes.Agregar(calificacionParcialEstudiante);
            _unidadDeTrabajo.Confirmar();
        }
        public void ModificarCalificacionParcialEstudiante(CalificacionParcialEstudiante calificacionParcialEstudiante)
        {
            _unidadDeTrabajo.RepositorioCalificacionParcialEstudiantes.Modificar(calificacionParcialEstudiante);
            _unidadDeTrabajo.Confirmar();
        }
        public void EliminarCalificacionParcialEstudiante(CalificacionParcialEstudiante calificacionParcialEstudiante)
        {
            _unidadDeTrabajo.RepositorioCalificacionParcialEstudiantes.Eliminar(calificacionParcialEstudiante);
            _unidadDeTrabajo.Confirmar();
        }

        //Ordenado por la nota final
        public IEnumerable<CalificacionParcialEstudiante> ObtenerCalificacionParcialEstudiantesPaginado(int pagina, int tamanio)
        {
            return _unidadDeTrabajo.RepositorioCalificacionParcialEstudiantes.Obtener(orderBy: c => c.OrderBy(cal => cal.Nota),
                page: pagina, pageSize: tamanio);
        }
    }
}
